{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/sklearn/feature_extraction/text.py:17: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working\n",
      "  from collections import Mapping, defaultdict\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "(1797, 64)"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.datasets import load_digits\n",
    "digits = load_digits()\n",
    "digits.data.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns;sns.set()\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(10, 64)"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.cluster import KMeans\n",
    "kmeans = KMeans(n_clusters=10,random_state=0)\n",
    "clusters = kmeans.fit_predict(digits.data)\n",
    "kmeans.cluster_centers_.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x360 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig,ax = plt.subplots(2,5,figsize=(10,5))\n",
    "centers = kmeans.cluster_centers_.reshape(10,8,8)\n",
    "for axi,center in zip(ax.flat,centers):\n",
    "    axi.set(xticks=[],yticks=[])\n",
    "    axi.imshow(center,interpolation='nearest',cmap=plt.cm.binary)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "from scipy.stats import mode\n",
    "labels = np.zeros_like(clusters)\n",
    "for i in range(10):\n",
    "    mask = (clusters == i)\n",
    "    labels[mask] = mode(digits.target[mask])[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.7935447968836951"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.metrics import accuracy_score\n",
    "accuracy_score(digits.target,labels)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(89.18, 0.5, 'predicted label')"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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qFevnizapqamzJw5kyZNmlCjRg3s7e1l0fX398fPz48sWbLIogcQFRVFjRo1+P3331m8eDGrVq3i4MGDunfUQnh4OGq1mv/97380a9aMFStWkDVrVpkqTvpjFBMTg6urqyx6NjY29OvXD1dXV+rWrUv+/PmpVKmS3roODg4cOHCA58+fExsby65du3j8+HG69b4Ik5CSGciamhTgz8nVq1fp2rUrQ4YMoUiRIrLp9u3bl8OHDxMRESHLbGmrV68mb9681KhRQ4bq3lGxYkUmT56MlZUVdnZ2eHl5sXdv+qYpeItarebw4cNMmTKF4OBgQkND+fvvv2WqGFatWkWXLl1k07t06RJr165l9+7dHDhwACMjIxYsWKC3bo0aNfD09MTHx4cffviBypUrY2pqmm69L8Ik7O3tP3DKR48eyXqLIDcnT56kc+fODBw4kBYtWsiief36dcLCwgCwtLTE2dmZy5cv6627adMmDh48iIeHBzNnzmTXrl1MmDBBb90TJ05w+PBhzbIkSZiY6DfDQ86cOalRowZ2dnZYWFjQsGFDzp07p2+pAMTFxXH8+HEcHR1l0QM4cOAANWrUIEeOHJiZmeHp6cmxY8f01n316hVOTk5s2LCBpUuXYmlpScGC6Z/46IswiZo1a3L48GGePn1KdHQ027Zto27dup+7rGSJiIigV69eTJ06lSZNmsime/fuXUaOHElcXBxxcXHs3LmTypUr6627aNEiNm7cyPr16+nbty+Ojo4MH67/BLwvX75k8uTJxMbG8urVK/7++2+cnJz00mzQoAEHDhwgKioKtVrN/v37cXBw0LtWgMuXL1OkSBHZnvMAlClThkOHDvHmzRskSWLXrl2UK1dOb927d+/Sq1cvEhISePnyJatXr9brFkmxWcUzEnt7e/z8/OjYsSPx8fF4eXnx3Xfffe6ykmXBggXExsYyceJEzbq2bdvSrl07vXTr1avH2bNnad68OcbGxjg7O8tqQnLToEEDTb2JiYl4e3vrPeN8+fLl+eGHH/D29iY+Pp5atWrRsqU881TcuXOHPHnyyKL1ltq1a3Px4kU8PT0xNTWlXLlydO/eXW/dMmXK4OzsTLNmzVCr1XTu3FmvPxgimUogEGjli7jdEAgEyiFMQiAQaEWYhEAg0IowCYFAoBVhEgKBQCvCJL5SunbtytOnTxXTL126tE59Hx+fNI+xWbduHT169NCnNEEaESbxlaLvOAnB14Mwia+QYcOGAdCpUyciIiJwdHSkf//+uLq6sn37dhwdHQkNDdV8/v3lU6dO4e3tTYsWLfD09GT37t1aj/XmzRsGDx5M69atcXFxwdPTkxs3bmi2b9++HU9PT9zc3D7IPUjrcQTK8UW8cSlIGwEBAaxbt46//vpLM+S5ZMmSzJgxQ7M9OV68eMGwYcNYsGABBQoU4OHDh7Ru3ZrSpUuTL1++ZPfZt28fWbJk0Qw28/f3Z/ny5YwaNQqA169fExwcTExMDK1ateLbb7+lQoUKKR5HkPEIkxAApGpI/JkzZ4iMjKRXr16adSqVisuXL6doEo0bN6ZgwYIsXbqU8PBwjh079sHr115eXpiYmGBjY4OLiwuHDh0CSPE4goxHmIQA4JOBS++/rR8XFwckDcUuXrw4q1ev1mx7+PCh1gCWFStWEBwcTPv27XF3dydbtmwfRAEaGxt/cEwTExOtx9mwYUP6f0hBuhDPJL5SjI2NSUhISHabnZ0d58+fB95dPQBUqFCB8PBwjh8/DkBYWBguLi48evQoxeMcOHCAFi1a0KpVK4oWLcquXbtQq9Wa7SEhIUiSxIsXL9i8eTN169ZN13EEyiGuJL5SnJyc8Pb2Zvbs2Z9sGzRoEGPGjCEoKAgHBwfNcGs7OztmzpypGeItSRKTJ08mf/78KR6na9eu+Pv7s27dOoyNjXFwcODKlSua7ba2tnh6ehITE0OHDh2oVq0aQJqPI1AOMQpUIBBoRdxuCAQCrQiTEAgEWhEmIRAItCJMQiAQaEWYhEAg0IowCYFAoBVhEgKBQCvCJAQCgVb+DztQIrDVebljAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.metrics import confusion_matrix\n",
    "\n",
    "mat  = confusion_matrix(digits.target,labels)\n",
    "\n",
    "sns.heatmap(mat,square=True,annot=True,cbar=False,fmt='d',xticklabels=digits.target_names,yticklabels=digits.target_names)\n",
    "\n",
    "plt.xlabel('true label')\n",
    "plt.ylabel('predicted label')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
